<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Symbol内置属性</title>
</head>
<body>
  <script>
    /* 
      https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Symbol
    */

    // Symbol.hasInstance 用于判断某对象是否为某构造器的实例。因此你可以用它自定义 instanceof 操作符在某个类上的行为。
    class Person {
      static [Symbol.hasInstance](params) {
        console.log(params)
        console.log("我被用来检测类型了");
        // return false;
        return true;
      }
    }

    let o = {};

    console.log(o instanceof Person);

    // 内置的Symbol.isConcatSpreadable  符号用于配置某对象作为Array.prototype.concat()方法的参数时是否展开其数组元素。
    const arr1 = [1,2,3]
    const arr2 = [4,5,6]
    console.log(arr1.concat(arr2))    //  [1, 2, 3, 4, 5, 6]

    arr2[Symbol.isConcatSpreadable] = false;  // 限制展开

    console.log(arr1.concat(arr2))    //  [1, 2, 3, Array(3)]
  </script>
</body>
</html>